package com.tiancheng.trade.settlement.mapper.settlement;

import com.tiancheng.trade.settlement.bo.ProductBO;
import com.tiancheng.trade.settlement.mapper.TYBaseMapper;
import com.tiancheng.trade.settlement.model.settlement.SettlementBillData;
import com.tiancheng.trade.settlement.model.settlement.SettlementRule;
import feign.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


@Repository
public interface SettlementBillDataMapper extends TYBaseMapper<SettlementBillData> {
    /**
     * 批量保存对账单实体
     *
     * @param basics
     * @return
     */
    int saveBatch(List<SettlementBillData> basics);

    /**
     * 查询当前主订单号下是否存在已核销的子订单
     *
     * @param tradeType
     * @return
     */
    Map<String, Object> selectSubOrderByStatus(@Param("tradeType") String tradeType, @Param("orderId") String orderId);

    /**
     * 批量重新匹配账单清分规则
     *
     * @param subOrderIds
     * @return
     */
    int updateBillClearRule(@Param("subOrderIds") List<String> subOrderIds, @Param("rule") SettlementRule rule);


    /**
     * 更新账单状态
     *
     * @param data
     * @return
     */
    int updateStatus(SettlementBillData data);

    /**
     * 根据子订单号集合查询账单数据
     *
     * @param subOrderIds
     * @return
     */
    List<SettlementBillData> selectBillDataBySubOrderIds(List<String> subOrderIds);


    /**
     * 根据日期查询核销金额成本信息
     * 商品成本价格
     *
     * @param date
     * @return
     */
    List<SettlementBillData> getVerifiedAmountCost(@Param("date") String date);

    /**
     * 无合同信息
     * 根据日期查询核销金额成本信息
     * 商品成本价格
     *
     * @param date
     * @return
     */
    List<SettlementBillData> getNoContractVerifiedAmount(@Param("date") String date);


    /**
     * 补签合同数据
     * 根据日期查询补签合同核销金额成本信息
     * 商品成本价格
     *
     * @param date
     * @return
     */
    List<SettlementBillData> getRepContractVerifiedCost(@Param("date") String date);

    /**
     * 更新核销账单的信息
     *
     * @param data
     * @return
     */
    int updateBillDataInfo(SettlementBillData data);

    /**
     * 修改产品编号
     *
     * @param bo
     * @return
     */
    int updateBillDataProduct(ProductBO bo);

}
